package projetolp2.Sistem;

/**
 * 
 * Meal-Points - Projeto de Laborat�rio de programacao 2 - 2011.1
 * 
 * Gerenciamento De Arquivos.
 * 
 * @author Diego Tavares Felipe Travassos 
 * @author Felipe Travassos
 * @author Mayra Kelly
 *
 */

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class GerenciamentoDeArquivos {
	
	/**
	 * Armazena as opinioes do usuario.
	 * 
	 */
	
	List<Opiniao> listaOpinioes = new ArrayList<Opiniao>(); 
	/**
	 * Armazena os usuarios do sistema.
	 * 
	 */
	static List<Usuario> listaUsuarios = new ArrayList<Usuario>(); 
	/**
	 * Armazena o nome dos usuarios do sistema.
	 * 
	 */
	List<String> nomeUsuarios = new ArrayList<String>();
	/**
	 * Armazena o nome dos estabelecimentos do sistema.
	 */
	List<String> nomeEstabelecimentos = new ArrayList<String>();
	
	public static String nomeArquivoEstabelecimentos; ///substituir nos metodos que listam objetos
	public static String nomeArquivoUsuarios;
	
	/**
	 * Retorna o nome do arquivo em que os estabelecimentos estao cadastrados
	 * o arquivo padrao e estabelecimentos.txt
	 * @return
	 * o nome do arquivo de estabelecimentos
	 */
	public static void inicializaArquivos(){
		try {
			nomeArquivoEstabelecimentos = lerArquivo("arquivos/sistema/caminhoArqEst.txt");				
			nomeArquivoUsuarios = lerArquivo("arquivos/sistema/caminhoArqOpi.txt");				
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * Realiza a persistencia do caminho do arquivo passado pelo usuario.
	 * 
	 * @param Escrever
	 *        O que vai ser escrito no arquivo.
	 * @param caminhoArq
	 *        O caminho do arquivo no sistema do computador.
	 */
	public static void gravaCaminhoArq(String Escrever,String caminhoArq ){
		escreveArquivo(Escrever, caminhoArq, false);
	}
	
	/**
	 * Retoma o nome do arquivo dos estabelecimentos.
	 * 
	 * @return
	 *       O nome do arquivo dos estabelecimentos.
	 */
	public static String getNomeArquivoEstabelecimentos() {
		return nomeArquivoEstabelecimentos;
	}

	/**
	 * Modifica o arquivo em que os estabelecimentos serao cadastrados
	 * @param arquivoEstabelecimentos
	 * o nome do novo arquivo
	 */
	public static void setNomeArquivoEstabelecimentos(String arquivoEstabelecimentos) {
		GerenciamentoDeArquivos.nomeArquivoEstabelecimentos = arquivoEstabelecimentos;
	}

	/**
	 * Retorna o nome do arquivo em que as opinioes dos usuarios estao cadastradas
	 * o arquivo padrao é opnioes_dos_usuarios.txt
	 * @return
	 * o nome do arquivo de usuarios
	 */
	public static String getNomeArquivoUsuarios() {
		return nomeArquivoUsuarios;
	}

	/**
	 * Modifica o arquivo em que os usuarios serao cadastrados
	 * @param arquivoUsuarios
	 * o nome do novo arquivo
	 */
	public static void setNomeArquivoUsuarios(String arquivoUsuarios) {
		GerenciamentoDeArquivos.nomeArquivoUsuarios = arquivoUsuarios;
	}

	/**
	 * Realiza a leitura do arquivo, convertendo-o em uma string
	 * @param arquivo
	 * o nome (ou caminho) do arquivo a ser lido
	 * @return
	 * todo o conteudo do arquivo
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	public static String lerArquivo(String arquivo)throws FileNotFoundException, IOException {
		String arq = "";
		File file = new File(arquivo);
		if (! file.exists()) {
		return "ERRO AO LER ARQUIVO";
		}

		BufferedReader br = new BufferedReader(new FileReader(arquivo));
		StringBuffer bufSaida = new StringBuffer();

		String linha;
		while( (linha = br.readLine()) != null ){
		bufSaida.append(linha + "\n");
			arq += linha + "\n";
		}
		br.close();
		String saida =  bufSaida.toString().replace("\t", " ");
		return saida.substring(0, saida.lastIndexOf("\n")); //substituindo as tabulacoes por espaco
	}
	
	/**
	 * Realiza a escritura no arquivo de um conteudo.
	 * 
	 * @param conteudo
	 * O que sra escrito no arquivo
	 * @param Arquivo
	 * O caminho e nome do arquivo que sera criado
	 * @param adicionar
	 * Um boolean que indica se o conteudo sera sobrescrito ou adicionado ao arquivo original
	 */
	public static void escreveArquivo(String conteudo, String Arquivo, boolean adicionar){
		System.out.println(conteudo);
        try {
            FileWriter fw;
            fw = new FileWriter(Arquivo, adicionar);
            fw.write(conteudo);
            fw.close();
        } catch (IOException ex) {
           System.err.println(ex.getMessage());
      
        }
    }

}
